home *** CD-ROM | disk | FTP | other *** search
- {--------------------------------------------------------------------}
- (* *)
- (* Gansi.Pas -- A Pascal unit containing all of *)
- (* ANSI graphics, cursor, keyboard, and screen *)
- (* mode manipulation strings. *)
- (* *)
- (* Version 2.21 April 26th, 1991 *)
- (* *)
- (* Greg Smith *)
- (* Boulder, Co. USA *)
- (* *)
- {--------------------------------------------------------------------}
-
- unit gansi;
-
- interface
-
- uses
- Dos;
-
- type
- ansicode = string[12]; { Maximum size for most ANSI strings }
-
- const
- hdr = #27+'['; { ansi control sequence }
- clsd = hdr+'0J'; { Clear Everything below cursor }
- clsu = hdr+'1J'; { Clear Everything above cursor }
- cls = hdr+'2J'; { Clear Screen }
- requestpos = hdr+'6n'; { request Cursor pos. StdIn rets Esc[y;xR }
- delline = hdr+'K'; { delete from cursor to EOL }
- savepos = hdr+'s'; { save cursor position }
- restpos = hdr+'u'; { restore cursor position }
- cursorhome = hdr+'H'; { Home cursor }
- normcolor = hdr+'0m'; { Normal white on black }
- highlight = hdr+'1m'; { Highlight. (Bold) }
- RevVideo = hdr+'7m'; { Reverse the FG and BG }
-
-
- function SetPos(x,y:integer): ansicode;
- function CursorUp(n:integer): ansicode;
- function CursorDown(n:integer): ansicode;
- function CursorRight(n:integer): ansicode;
- function CursorLeft(n:integer): ansicode;
-
- function InsertChar(n:integer): ansicode;
- function DeleteChar(n:integer): ansicode;
- function InsertLine(n:integer): ansicode;
- function DeleteLine(n:integer): ansicode;
-
- function SetAttr(C:integer): ansicode;
- function SetColor(f,b:integer): ansicode;
-
- function SetMode(mode:integer): ansicode;
- function Resetmode(mode:integer): ansicode;
-
- function SetChar(ch:char;st:string): string;
- function SetExtendedKey(key:integer;st:string): string;
-
-
- implementation
-
- type intstring = string[6];
-
- { Misc support functions }
-
- function bts(x:integer): intstring;
- var
- z : intstring;
- begin
- Str(x,z);
- bts := z;
- end;
-
- function HNum(n:integer): ansicode;
- var
- z : intstring;
- begin
- Str(n,z);
- HNum := hdr+z;
- end;
-
- { Cursor Control functions }
-
- function SetPos(x,y:integer): ansicode;
- begin
- SetPos := hnum(y)+';'+bts(x)+'H';
- end;
-
- function CursorUp(n:integer): ansicode;
- begin
- CursorUp := hnum(n)+'A';
- end;
-
- function CursorDown(n:integer): ansicode;
- begin
- CursorDown := hnum(n)+'B';
- end;
-
- function CursorRight(n:integer): ansicode;
- begin
- CursorRight := hnum(n)+'C';
- end;
-
- function CursorLeft(n:integer): ansicode;
- begin
- CursorLeft := hnum(n)+'D';
- end;
-
-
- { Editing Functions }
-
- function InsertChar(n:integer): ansicode;
- begin
- InsertChar := hnum(n)+'@';
- end;
-
- function DeleteChar(n:integer): ansicode;
- begin
- DeleteChar := hnum(n)+'P';
- end;
-
- function InsertLine(n:integer): ansicode;
- begin
- InsertLine := hnum(n)+'L';
- end;
-
- function DeleteLine(n:integer): ansicode;
- begin
- DeleteLine := hnum(n)+'M';
- end;
-
-
- { Color functions }
-
- function SetAttr(C:integer): ansicode;
- var
- x : integer;
- tmp : ansicode;
-
- procedure ColorIdentify;
- begin
- case x of
- 0 : tmp := tmp+'0'; { Black }
- 1 : tmp := tmp+'4'; { Blue }
- 2 : tmp := tmp+'2'; { Green }
- 3 : tmp := tmp+'6'; { Cyan }
- 4 : tmp := tmp+'1'; { Red }
- 5 : tmp := tmp+'5'; { Magenta }
- 6 : tmp := tmp+'3'; { Brown/Yellow }
- 7 : tmp := tmp+'7'; { White }
- end; { case }
- end; { ColorIdentify }
-
- begin
- tmp := hdr;
- if (c and $08)=1 then tmp := tmp+'1' else tmp := tmp+'0';
- tmp := tmp+';3'; { common to all fgnds. }
- x := c and $07; { first three bits. }
- ColorIdentify; { Add Color Value digit }
- tmp := tmp+';4'; { common to all bkgnds. }
- x := (c and $70) shr 4;
- ColorIdentify; { Add color value digit }
- if (c and $80)=$80 then tmp := tmp+';5';
- SetAttr := tmp+'m'; { complete ANSI code! }
- end; { setattr }
-
- function SetColor(f,b:integer): ansicode;
- begin
- b := (b shl 4); { move to high bits. }
- f := (f and $0f); { zero all high bits. }
- SetColor := SetAttr((b OR f)); {Create Attribute byte from values.}
- end; { SetColor }
-
-
- { Mode Setting Functions }
-
- function SetMode(mode:integer): ansicode;
- begin
- SetMode := hdr+'='+bts(mode)+'h';
- { Modes:
- 0 40x25 Black and White
- 1 40x25 Color
- 2 80x25 Black and White
- 3 80x25 Color
- 4 320x200 color (CGA)
- 5 320x200 Black and White (CGA)
- 6 640x200 Black and White (CGA)
- 7 Wrap at end of line.
- }
- end;
-
- function Resetmode(mode:integer): ansicode;
- begin
- Resetmode := hdr+'='+bts(mode)+'l'; { Same modes as above }
- end; { Wrap at EOL will turn off }
-
- { Keyboard Re-Defining functions }
-
- function SetChar(ch:char;st:string): string;
- begin
- SetChar := hdr+bts(ord(ch))+';"'+st+'"p'; { when ch is pressed st is }
- end; { sent instead of ch }
-
- function SetExtendedKey(key:integer;st:string): string;
- begin
- SetExtendedKey := hdr+'0;'+bts(key)+';"'+st+'"p'; { Same as above. but the }
- end; { Key is an extended code }
-
-
- end.